﻿
_global.nc = new NetConnection();

loadInfo.text += "\r正在尝试连接视频服务器...";

nc.connect("rtmp://" + serverIp + "/videoChat", memberId, memberName, 2);

nc.onStatus = function(info:Object) {
	if (info.code == "NetConnection.Connect.Success") {
		loadInfo.text += "\r连接视频服务器成功...";
		// 导入外部数据
		if (outIp == undefined) {
			setTimeout(hideLoadInfo, 3000);
		} else {
			importOutData();
		}
	} else {
		loadInfo.text += "\r连接视频服务器失败...";
	}
};


/**
 * @des 退出当前会议
 */
nc.clearMeetingPlace = function() {
	alert("系统提示：", "会议已经被删除，强制退出当前会议！", 1);
	// 重置当前会议为空
	currentInfo.data.meetingId = "";
	
	txtTitle.removeTextField();
	ctrlTitle.removeMovieClip();
	showAllContent.removeTextField();
	// 释放定时器
	clearInterval(_global.setTxt);
	
	// 清空视频列表
	clearVideoList();
	clearMc();
	
	// 更新服务器端当前用户所参加的会议
	nc.call("updateCurrentMeeting",
			null,
			"");
};


/**
 * @des 弹出服务器端消息
 * @param msg 消息字符串 当消息串为[会议创建成功!]时则认为需要关闭win窗口
 */
nc.showMsg = function(msg) {
	if (msg == "会议创建成功！") {
		win.deletePopUp();
		trace("已经关闭创建会议窗口!");
	}
	alert("系统提示：", msg, 1);
};


/**
 * @des 更新聊天内容
 * @param senderIdAndtoName 包含发送人ID与接收人名称，之间用冒号分开
 *        如果冒号后面没有接收人名称，则认为是公共聊天信息
 * @param msg 消息内容
 */
nc.updateMsg = function(senderIdAndtoName, msg) {
	var senderId:String, toName:String;
	
	if (senderIdAndtoName.indexOf(":") == -1) {
		nc.call("upLog", null, "接收聊天内容失败！");
		return false;
	}
	
	senderId = senderIdAndtoName.split(":")[0];
	toName = senderIdAndtoName.split(":")[1];
	
	if (toName == "" && senderId != memberId) {
		call_board.text += msg;
	} else {
		if ((toName == memberName && senderId != memberId) || (currentInfo.data.createUser == memberName && currentInfo.data.showAll)) {
			call_board.text += msg;
		}
	}
	
	// 调整聊天显示区域的垂直滚动条
	updateVPosition();
};


/**
 * @des 设置聊天室是否允许私聊
 * @param sender 广播者，在这里不使用
 * @param flag 布尔值，是否允许私聊
 */
nc.setPrivateChat = function(sender, flag) {
	currentInfo.data.allowPrivateChat = flag;
	initMemberListOfChat();
};


/**
 * @des 设置主持人是否显示所有聊天内容
 * @param sender 广播者，在这里不使用
 * @param flag 布尔值，是否显示所有聊天
 */
nc.setShowAll = function(sender, flag) {
	currentInfo.data.showAll = flag;
};


/**
 * @des 更新本地摄像头的采样
 * @param id 要更新摄像头采样的成员ID
 * @param flag 要更新到的模式，true,发言席模式(320*300)　false,小窗口模式(160*120)
 */
nc.modifyCamera = function(id, flag) {
	if (memberId == id) {
		if (flag) {
			_global.camera.setMode(320, 240, 15, true);
			trace("发言席模式" + flag);
		} else {
			_global.camera.setMode(160, 120, 15, true);
			trace("小窗口模式" + flag);
		}
	}
};

/**
 * @des 申请发言
 * @param proposer 申请人，接收到的申请人为成员名称，非成员ID
 */
nc.applySpeak = function(proposer) {
	if (memberName == currentInfo.data.createUser) {
		// 判断此人是否在申请队列中
		for (var i:Number = 0; i < applyMemberList.length; i++) {
			if (applyMemberList[i] == proposer) {
				return ;
			}
		}
		// 将申请人压入队列
		applyMemberList.push(proposer);
		
		var applyObject:Function = function(evt:Object) {
			if (evt.detail == mx.controls.Alert.OK) {
				nc.call("switchProlocutor", null, this.memberId, true);
				// 清除此申请人
				for (var i = 0; i < applyMemberList.length; i++) {
					if (applyMemberList[i] == proposer) {
						applyMemberList.splice(i, 1);
					}
				}
			} else {
				nc.call("switchProlocutor", null, this.memberId, false);
				// 清除此申请人
				for (var i = 0; i < applyMemberList.length; i++) {
					if (applyMemberList[i] == proposer) {
						applyMemberList.splice(i, 1);
					}
				}
			}
		};
		
		mx.controls.Alert.okLabel = "同意";
		mx.controls.Alert.cancelLabel = "拒绝";
		var tmp = mx.controls.Alert.show(proposer + " 申请发言！",
										 "系统提示：",
										 mx.controls.Alert.OK | mx.controls.Alert.CANCEL,
										 _root,
										 applyObject);
		
		// 给Alert对象添加属性，供applyObject函数调用
		tmp.memberId = getIdOrName(proposer, "id");
		tmp.swapDepths(_root.getNextHighestDepth());
	}
};

/**
 * @des 切换发言人
 * @param proposer 申请人的ID
 */
nc.switchProlocutor = function(proposerId) {
	clearCurrentProlocutor(hasProlocutor());
	setCurrentProlocutor(proposerId);
};


/**
 * @des 停止某人发言
 * @param proposerId 被停止发言的发言人ID
 */
nc.stopSpeak = function(proposerId) {
	for (var i:Number = 0; i < memberListArray.length; i++) {
		if (memberListArray[i].memberId == proposerId) {
			removeMovieClip(fs);
			clearCurrentProlocutor(i);
		}
	}
};


/**
 * @des 更新視頻列表
 */
nc.updateVideoList = function(memberList, str) {
	clearVideoList();
	initVideoMemberList(memberList);
	getLen();
	buildList();
};

/**
 * 清理某用户的视频图像
 * @param proposerId 被清理的用户id
 */
nc.clearVideo = function(proposerId) {
	for (var i:Number = 0; i < memberListArray.length; i++) {
		if (memberListArray[i].memberId == proposerId) {
			memberListArray[i].winObject.videoWin.close();
			memberListArray[i].winObject.videoWin.clear();
			break;
		}
	}
};